package com.wd.study.pattern;

/**
 * NA<BR>
 *
 * @author w4425
 * @version [V2.0.0, 2021/3/19]
 * @since V2.0.0
 */
public class android {
    /**
     * 面向对象六大原则
     * 1 单一职责原则
     * 单一原则很简单，就是将一组相关性很高的函数、数据封装到一个类中。换句话说，一个类应该职责单一。
     * 2 开闭原则
     * 就是一个类应该对于扩展是开放的，但是对于修改是封闭的。通过扩展的方式实现新的功能，而不是通过修改已有的代码实现。
     * 3 里氏替换原则
     * 定义为：所有引用基类的地方必须能透明地使用其子类对象。本质上就是说，要好好利用继承和多态。
     * 4 依赖倒置原则
     * 依赖倒置主要是实现解耦，使得高层次的模块不依赖于低层次模块的具体实现细节。怎么去理解它呢，我们需要知道几个关键点：就是面向接口
     * <p>
     * （1）高层模块不应该依赖底层模块（具体实现），二者都应该依赖其抽象（抽象类或接口）
     * （2）抽象不应该依赖细节（废话，抽象类跟接口肯定不依赖具体的实现了）
     * （3）细节应该依赖于抽象（同样废话，具体实现类肯定要依赖其继承的抽象类或接口）
     * <p>
     * 其实，在我们用的Java语言中，抽象就是指接口或者抽象类，二者都是不能直接被实例化；细节就是实现类，实现接口或者继承抽象类而产生的类，就是细节。使用Java语言描述就简单了：就是各个模块之间相互传递的参数声明为抽象类型，而不是声明为具体的实现类；
     *
     * 5 接口隔离原则
     * 接口隔离原则定义：类之间的依赖关系应该建立在最小的接口上。其原则是将非常庞大的、臃肿的接口拆分成更小的更具体的接口。
     *
     * 6 迪米特原则
     * 描述的原则：一个对象应该对其他的对象有最少的了解。什么意思呢？就是说一个类应该对自己调用的类知道的最少。还是不懂？
     * 其实简单来说：假设类A实现了某个功能，类B需要调用类A的去执行这个功能，那么类A应该只暴露一个函数给类B，这个函数表示是实现这个功能的函数，而不是让类A把实现这个功能的所有细分的函数暴露给B。
     *
     * 总结
     * 一个类应该职责单一。
     * 一个类应该对于扩展是开放的，但是对于修改是封闭的。
     * 对外提供接口函数，细节用实现类做。
     */
    // ###3 里氏替换原则 start###
    //窗口类
    public class Window {
        public void show(View child) {
            child.draw();
        }
    }

    public abstract class View {
        public abstract void draw();

        public void measure(int w, int h) {

        }
    }

    public class Button extends View {
        @Override
        public void draw() {
            // 绘制按钮
        }
    }

    public class TextView extends View {
        @Override
        public void draw() {
            //绘制文本
        }
    }
    // 3 里氏替换原则 end###
}
